package cw.itsource.producers;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import cw.itsource.utils.ConnectionUtil;

/**
 * 测试流程：
 * 1.先启动你的rabbitmq的服务
 * 2.执行下面的示例
 */
public class QueueProducer {
    private static final String QUEUE = "hello-queue";

    public static void main(String[] args) throws Exception {
        // 练习使用mq的生产发送一条 队列的消息
        // 1. 获取 连接对象
        Connection connection = ConnectionUtil.getConnection();
        // 2. 创建通道channel
        Channel channel = connection.createChannel();
        // 3. 向通道中发送消息
        /**
         * 声明队列，如果Rabbit中没有此队列将自动创建
         * param1:队列名称
         * param2:是否持久化
         * param3:队列是否独占此连接
         * param4:队列不再使用时是否自动删除此队列
         * param5:队列参数
         */
        channel.queueDeclare(QUEUE, true, false, false, null);
        for (int i = 1; i < 50; i++) {
            //4. 定义要发送的消息内容（绝大多数情况下，发送的消息都是string(json就是一个string)）
            String msg = "[" + i + "]" + "欢迎来到mq的世界，这是我的第一个程序：hello world!!!";
            //5. 调用API进行消息发送
            /**
             * 消息发布方法
             * param1：Exchange的名称，如果没有指定，则使用Default Exchange
             * param2:routingKey,消息的路由Key，是用于Exchange（交换机）将消息转发到指定的消息队列
             * param3:消息包含的属性
             * param4：消息体
             */
            /**
             * 这里没有指定交换机，消息将发送给默认交换机，每个队列也会绑定那个默认的交换机，但是不能显
             示绑定或解除绑定
             * 默认的交换机，routingKey等于队列名称
             */
            channel.basicPublish("", QUEUE, null, msg.getBytes());

            System.out.println(">>>>>>>>>>>>>>生产者发送的消息内容是：" + msg);
        }


    }
}
